perm filename NLF.SAI[SYS,HE]7 blob sn#089099 filedate 1974-02-28 generic text, type T, neo UTF8
00100	BEGIN "NLF"
00200	REQUIRE "PREAMB.sai[SYS,HE]" SOURCE_FILE;
00300	SMP TO_ARM(REAL ARRAY T;REFERENCE INTEGER FLAG);
00400	SMP GO_ARM(REAL ARRAY T;REFERENCE INTEGER FLAG);
00500	REQUIRE 200 STRING_SPACE;
00600	DEFINE CRLF="'15&'12";
00700	PRELOAD_WITH 0, 0, 0.4, 1.0;
00800	SAFE REAL ARRAY SL[1:4];
00900	SAFE REAL ARRAY NULL[1:4];
01000	PRELOAD_WITH 	 0.00000, -1.00000,  0.00000, 10.0,
01100			-1.00000,  0.00000,  0.00000, 25.0,	
01200			 0.00000,  0.00000, -1.00000,  1.0,
01300			 0.00000,  0.00000,  0.00000,  1.0;
01400	REAL ARRAY X1[1:4,1:4];
01500	PRELOAD_WITH 	 0.00000, -1.00000,  0.00000, 10.0,
01600			-1.00000,  0.00000,  0.00000, 25.0,	
01700			 0.00000,  0.00000, -1.00000,  0.8,
01800			 0.00000,  0.00000,  0.00000,  1.0;
01900	REAL ARRAY FROM[1:4,1:4];
02000	PRELOAD_WITH 	 0.00000, -1.00000,  0.00000, 20.0,
02100			-1.00000,  0.00000,  0.00000, 25.0,
02200			 0.00000,  0.00000, -1.00000,  1.2,
02300			 0.00000,  0.00000,  0.00000,  1.0;
02400	REAL ARRAY X2[1:4,1:4];
02500	PRELOAD_WITH 	 0.00000, -1.00000,  0.00000, 30.0,
02600			-1.00000,  0.00000,  0.00000, 25.0,
02700			 0.00000,  0.00000, -1.00000,  0.9,
02800			 0.00000,  0.00000,  0.00000,  1.0;
02900	REAL ARRAY X3[1:4,1:4];
03000	PRELOAD_WITH 	 0.00000, -1.00000,  0.00000, 30.0,
03100			-1.00000,  0.00000,  0.00000, 25.0,
03200			 0.00000,  0.00000, -1.00000,  0.8,
03300			 0.00000,  0.00000,  0.00000,  1.0;
03400	REAL ARRAY TOA[1:4,1:4];
03500	PRELOAD_WITH 	-1.00000,  0.00000,  0.00000, 30.0,
03600			 0.00000,  1.00000,  0.00000, 25.0,
03700			 0.00000,  0.00000, -1.00000,  0.8,
03800			 0.00000,  0.00000,  0.00000,  1.0;
03900	REAL ARRAY SQAR[1:4,1:4];
04000	PRELOAD_WITH 0,0,0,1;
04100	REAL ARRAY ZERO[1:4];
04200	INTEGER I,M;
04300	BOOLEAN FIRST;
04400	STRING S;
04500	LABEL L1;
04600	SIMPLE PROCEDURE SORRY;
04700	BEGIN	OUTSTR("SORRY"&CRLF&CRLF);
04800		CALL(0,"EXIT");
04900	END;
05000	
05100	
05200	SIMPLE PROCEDURE MOVE_IT(REAL ARRAY A,B);
05300	BEGIN	INTEGER PLAN_SAV;
05400		A[3,4]←A[3,4]-1.00;
05500		ISSUE(5,"NLF","HANDY",MESSAGE START_TRAJECTORY ("HANOI",0));
05600		ISSUE(5,"NLF","HANDY",MESSAGE SET_ARM("FROM",A,FROM));
05700		ISSUE(5,"NLF","HANDY",MESSAGE SET_ARM("TO",B,TOA));
05800		ISSUE(5,"NLF","HANDY",MESSAGE CLOSE_TRAJECTORY);
05900		ISSUE(7,"NLF","HANDY",MESSAGE DO_IT(0,"HANOI"));
06000		ISSUE(7,"NLF","HANDY",MESSAGE DO_IT(CVSIX("SYS HE"),"NLF"));
06100		IF ARM_STATUS THEN OUTSTR(CVOS(ARM_STATUS)&" SORRY, YOU WILL HAVE TO DO IT FOR ME"&CRLF);
06200		B[3,4]←B[3,4]+1.0;
06300	END;
06400	
06500	RECURSIVE PROCEDURE STACK(INTEGER H;REAL ARRAY A,B,C);
06600	BEGIN	IF H=1 THEN
06700		BEGIN	MOVE_IT(A,B);
06800			RETURN ;
06900		END;
07000		H←H-1;
07100		STACK(H,A,C,B);
07200		MOVE_IT(A,B);
07300		STACK(H,C,B,A);
07400	END;
     

00100	PUT_DATA(0,0,"NLF");
00200	WHILE ¬ YES_HAND DO CALL(1,"SLEEP");
00300	OUTSTR("DRIVE INITIALIZED"&CRLF&CRLF);
00400	DO BEGIN
00500	ISSUE(5,"NLF","HANDY",MESSAGE START_TRAJECTORY ("HANOI",0));
00600	ISSUE(5,"NLF","HANDY",MESSAGE PARK_ARM);
00700	ISSUE(5,"NLF","HANDY",MESSAGE OPEN_HAND(3));
00800	ISSUE(5,"NLF","HANDY",MESSAGE CLOSE_TRAJECTORY);
00900	OUTSTR("STAND CLEAR OF THE ARM AND TYPE C/R
01000	");
01100	INCHWL;
01200	ISSUE(7,"NLF","HANDY",MESSAGE DO_IT(0,"HANOI"));
01300	IF ARM_STATUS THEN BEGIN OUTSTR(CVOS(ARM_STATUS)&" PLEASE CHECK THE ARM & TYPE C/R"&'15&'12);
01400		INCHWL;
01500	END;
01600	END UNTIL ¬ARM_STATUS;
01700	OUTSTR("PLACE BLOCKS AT (10,25) AND TYPE THE HEIGHT"
01800	&CRLF&CRLF);
01900	SETFORMAT(0,1);
02000	X1[3,4]←0.8;
02100	X2[3,4]←0.8;
02200	X3[3,4]←0.8;
02300	S←INCHWL;
02400	I←INTSCAN(S,M);
02500	IF I<1 THEN BEGIN OUTSTR("WE CANNOT MOVE BELOW THE TABLE"&CRLF&CRLF);
02600		SORRY;END;
02700	M←2↑I-1;
02800	OUTSTR("THAT'S "&CVS(M)& " MOVES, KEEP YOUR FINGERS CROSSED"&CRLF&CRLF);
02900	SETFORMAT(-5,0);
03000	X1[3,4]←X1[3,4]+I;
03100	ISSUE(5,"NLF","HANDY",MESSAGE START_TRAJECTORY ("HANOI",0));
03200	ISSUE(5,"NLF","HANDY",MESSAGE MOVE_ARM(X1,ARM_PLAN));
03300	ISSUE(5,"NLF","HANDY",MESSAGE CLOSE_TRAJECTORY);
03400	ISSUE(7,"NLF","HANDY",MESSAGE DO_IT(0,"HANOI"));
03500	IF ARM_STATUS THEN OUTSTR(CVOS(ARM_STATUS)&" PLEASE CHECK THE ARM & TYPE C/R"&'15&'12);
03600	OUTSTR("THIS IS WHERE THE ARM THINKS THE BLOCKS SHOULD BE
03700	TYPE C/R TO PROCEED
03800	");
03900	INCHWL;
04000	STACK(I,X1,X2,X3);
04100	M←ISSUE(5,"NLF","HANDY",MESSAGE START_TRAJECTORY("HANOI",0));
04200	ISSUE(5,"NLF","HANDY",MESSAGE PARK_ARM);
04300	ISSUE(7,"NLF","HANDY",MESSAGE CLOSE_TRAJECTORY);
04400	ISSUE(7,"NLF","HANDY",MESSAGE DO_IT(0,"HANOI"));
04500	IF ARM_STATUS THEN OUTSTR("DID I HIT SOMEBODY!"&'15&'12) ELSE
04600	OUTSTR("IF THAT HAD BEEN 64 BLOCKS THE WORLD WOULD HAVE JUST ENDED!
04700	THANK YOU AND GOOD NIGHT."&CRLF&CRLF);
04800	END;